Android sqlite3 编译及安装

2023-10-22

当我们想在 adb shell 环境下查看 sqlite3 数据库时,可以使用 sqlite3 命令,但是有些手机没有内置 sqlite3,所以就会报 sqlite3: inaccessible or not found 的错误,需要我们自己将 sqlite3 可执行文件导入到系统中。本文以 mac + Redmi Note 9(64位,Android31) 为例,介绍从编译 sqlite3 到 push 到手机 /system 分区。

1. 编译 sqlite3

  1. 官网下载 sqlite-autoconf-xxxxxxx.tar.gz 并解压
  2. 确保电脑配置了 ANDROID_HOME 环境变量,修改脚本中对应的 ndk 版本号
  3. 如果是32位架构,HOST 改为 armv7a,API 修改为对应手机的 Android 系统版本

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

export TOOLCHAIN=$ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/darwin-x86_64
export HOST=aarch64-linux-android
export API=31
export CC=$TOOLCHAIN/bin/$HOST$API-clang
export CXX=$TOOLCHAIN/bin/$HOST$API-clang++
export AR=$TOOLCHAIN/bin/$HOST-ar
export AS=$TOOLCHAIN/bin/$HOST-as
export LD=$TOOLCHAIN/bin/$HOST-ld
export RANLIB=$TOOLCHAIN/bin/$HOST-ranlib
export STRIP=$TOOLCHAIN/bin/$HOST-strip
export CFLAGS="-mthumb -fpic -ffunction-sections -funwind-tables -fstack-protector-all -fno-strict-aliasing"
export CXXFLAGS="$CFLAGS -frtti -fexceptions"

./configure --prefix=`pwd`/build/sqlite3/ \
--host=$HOST \
--enable-shared \
--disable-static \
--disable-tcl

if [ $? -eq 0 ]; then
make clean
make -j16
make install
fi

2. push 到 /system/xbin/

cd 到源码目录执行上述脚本会生成 sqlite3 可执行文件,如果你的手机已经是完全 root 过的,则直接 push 到 /system/xbin/ 即可。

但是我的手机是借助 magisk 来开启 root 权限的,是没有 system 分区的写权限的,这里我们先将 sqlite3 push 到 /sdcard 目录下,然后需要安装一个 magisk 模块 magic_overlayfs 来开启读写权限。

安装好 magic_overlayfs 模块后,终端执行 adb shell "su -c 'cp /sdcard/sqlite3 /system/xbin/'"

Finish